/**
 * Api  Post Get Download下载方法封装集合
 */
import request from "./request";
import requestAi from "./request_ai";
import { ElMessage } from "element-plus";
import { ResponseCode } from "@/utils/response-code";

/**
 * post方法
 * @param {*} url 地址
 * @param {*} data 参数
 * @param {*} json 是否开启json格式，true/false
 */
export function Post(url, data, json) {
  // @ts-ignore
  return requestAi({
    url: url,
    method: "post",
    data,
    json
  });
}

/**
 * get方法,添加授权token
 * @param {*} url 地址
 * @param {*} params 参数
 */
export function Get(url, params) {
  return request({
    url: url,
    method: "get",
    params
  });
}

/**
 * get方法的下载
 * @param {*} url 地址
 * @param {*} data 参数
 * @param {*} callback 下载回调
 */
export function GetDownload(url, data, callback) {
  return download(
    {
      url: url,
      method: "get",
      params: data,
      headers: { "Content-Type": "application/json; application/octet-stream" },
      responseType: "blob"
    },
    callback
  );
}

/**
 * 下载文件方法
 * @param {*} options 参数
 * @param {*} callback 回调
 */
function download(options, callback) {
  return request(options)
    .then((res) => {
      if (["application/msexcel", "application/octet-stream"].indexOf(res.data.type) != -1) {
        // 创建Blob对象，设置文件类型， res.data就是后台返回的流文件的值
        const blob = new Blob([res.data], {
          type: "application/vnd.ms-excel"
        });
        // 利用a标签自定义下载文件名
        const link = document.createElement("a");
        const url = URL.createObjectURL(blob);
        link.href = url;
        // 获取后台设置的headers里的文件名，和后台提前商量好设定一个filename
        link.download = decodeURI(res.headers["filename"]);
        link.click(); // 下载文件
        URL.revokeObjectURL(url); // 释放内存
      } else if (res.data.type === "application/json") {
        var reader = new FileReader();
        reader.onload = function (event) {
          try {
            // @ts-ignore
            const resp = JSON.parse(event.target.result); // 内容就在这里
            if (resp.code !== 200) {
              ResponseCode(resp);
            }
          } catch (error) {
            ElMessage.error("操作失败");
            callback(false);
          }
        };
        reader.readAsText(res.data);
      } else {
        ElMessage.success("操作成功");
      }
    })
    .catch(() => {
      callback && callback(false);
    });
}
